﻿//#include <iostream>
//#include <string>
//#include <vector>
//#include <stack>
//using namespace std;
//int evalRPN(vector<string>& tokens)
//{
//    stack<int> s;
//    for (size_t i = 0; i < tokens.size(); ++i)
//    {
//        string& str = tokens[i];
//        // str为数字
//        if (!("+" == str || "-" == str || "*" == str || "/" == str))
//        {
//            s.push(atoi(str.c_str()));
//        }
//        else
//        {
//            // str为操作符
//            int right = s.top();
//            s.pop();
//            int left = s.top();
//            s.pop();
//            switch (str[0])
//            {
//            case '+':
//                s.push(left + right);
//                break;
//            case '-':
//                s.push(left - right);
//                break;
//            case '*':
//                s.push(left * right);
//                break;
//            case '/':
//                // 题目说明了不存在除数为0的情况
//                s.push(left / right);
//                break;
//            }
//        }
//    }
//    return s.top();
//}
//

//int main()
//{
//    vector<string> tokens = { "2","1","+","3","*" };
//    int ret = evalRPN(tokens);
//    cout << ret << endl;
//}

//#include <iostream>
//#include <math.h>
//using namespace std;
//
//typedef long long LL;
//
//
//bool is_prime(LL n)
//{
//    if (n < 2) return false;
//    for (LL i = 2; i <= sqrt(n); i++)
//    {
//        if (n % i == 0) return false;
//    }
//    return true;
//}
//
//LL changestr(string& str)
//{
//    for (int i = str.size() - 2; i >= 0; i--)
//    {
//        str += str[i];
//    }
//    return stol(str);
//}
//int main()
//{
//    string n;
//    cin >> n;
//    LL x = changestr(n);
//    if (is_prime(x))
//    {
//        cout << "prime" << endl;
//    }
//    else {
//        cout << "noprime" << endl;
//    }
//    return 0;
//}

//#include <iostream>
//#include <algorithm>
//using namespace std;
//typedef pair<int, int> PII;
//const int N = 2e5 + 10;
//int n;
//PII arr[N];
////int main()
//{
//    cin >> n;
//    for (int i = 0; i < n; i++) cin >> arr[i].first >> arr[i].second;
//    sort(arr, arr + n);
//    int ret = 0, r = arr[0].second;
//    for (int i = 1; i < n; i++)
//    {
//        if (arr[i].first < r) // 有重叠
//        {
//            r = min(r, arr[i].second);
//        }
//        else // 没有重叠
//        {
//            ret++;
//            r = arr[i].second;
//        }
//    }
//    cout << ret + 1 << endl;
//    return 0;
//}

//#include <queue>
//using namespace std;
//
//class MyStack {
//public:
//    MyStack() {}
//
//    void push(int x) {
//        // 将元素推入当前非空队列，若都为空则选择q2
//        if (!q1.empty()) {
//            q1.push(x);
//        }
//        else {
//            q2.push(x);
//        }
//    }
//
//    int pop() {
//        int top;
//        if (!q1.empty()) {
//            // 将q1中除最后一个元素外的所有元素转移到q2
//            while (q1.size() > 1) {
//                q2.push(q1.front());
//                q1.pop();
//            }
//            top = q1.front();
//            q1.pop();
//        }
//        else {
//            // 将q2中除最后一个元素外的所有元素转移到q1
//            while (q2.size() > 1) {
//                q1.push(q2.front());
//                q2.pop();
//            }
//            top = q2.front();
//            q2.pop();
//        }
//        return top;
//    }
//
//    int top() {
//        // 直接返回非空队列的尾部元素（即最后入队的元素）
//        if (!q1.empty()) {
//            return q1.back();
//        }
//        else {
//            return q2.back();
//        }
//    }
//
//    bool empty() {
//        return q1.empty() && q2.empty();
//    }
//
//private:
//    queue<int> q1;
//    queue<int> q2;
//};
//
//class MyStack {
//public:
//    MyStack() {
//
//    }
//
//    void push(int x)
//    {
//        if (!q1.empty())
//        {
//            q1.push(x);
//        }
//        else
//        {
//            q2.push(x);
//        }
//    }
//
//    int pop()
//    {
//        queue<int>* empty = &q1;
//        queue<int>* noempty = &q2;
//        //假设
//        if (!q1.empty())
//        {
//            noempty = &q1;
//            empty = &q2;
//        }
//        while (noempty->size() > 1)
//        {
//            empty->push(noempty->front());
//            noempty->pop();
//        }
//        int top = noempty->front();
//        noempty->pop();
//        return top;
//    }
//
//    int top() {
//        if (!q1.empty())
//        {
//            return q1.back();
//        }
//        else {
//            return q2.back();
//        }
//    }
//
//    bool empty() {
//        return q1.empty() && q2.empty();
//    }
//private:
//    queue<int> q1;
//    queue<int> q2;
//};
//
///**
// * Your MyStack object will be instantiated and called as such:
// * MyStack* obj = new MyStack();
// * obj->push(x);
// * int param_2 = obj->pop();
// * int param_3 = obj->top();
// * bool param_4 = obj->empty();
// */


//error
//#include <iostream>
//#include <vector>
//#include <queue>
//#include <functional>
//using namespace std;
//
//int func(int n, vector<vector<int>>& startEnd)
//{
//    sort(startEnd.begin(), startEnd.end());
//    priority_queue<int, vector<int>, greater<int>> heap; // 创建⼀个⼩根堆
//    heap.push(startEnd[0][1]); // 先把第⼀个区间放进去
//    for (int i = 1; i < n; i++) // 处理剩下的区间
//    {
//        int a = startEnd[i][0], b = startEnd[i][1];
//        if (a >= heap.top()) // 没有重叠
//        {
//            heap.pop();
//            heap.push(b);
//        }
//        else // 有重叠
//        {
//            heap.push(b);
//        }
//    }
//    return heap.size();
//}
//
//int main()
//{
//    int n;
//    cin >> n;
//    vector<vector<int>> vv;
//    vector<int>v;
//    vv.clear();
//    int temp = 0;
//    for (int i = 0; i < n; i++)//输入r*c的二维数组
//    {
//        v.clear();//子数组返回时要清除
//        for (int j = 0; j < 2; j++)
//        {
//            cin >> temp;
//            v.push_back(temp);
//
//        }
//        vv.push_back(v);
//    }
//    int ret = func(n, vv);
//    cout << ret << endl;
//    return 0;
}